package com.zenithmind.user.security;

/**
 * 密码编码器接口
 * 遵循依赖倒置原则：定义抽象接口，便于替换不同的加密算法
 * 遵循单一职责原则：专门负责密码加密和验证
 */
public interface PasswordEncoder {
    
    /**
     * 对明文密码进行加密
     * 
     * @param rawPassword 明文密码
     * @return 加密后的密码
     */
    String encode(String rawPassword);
    
    /**
     * 验证明文密码与加密密码是否匹配
     * 
     * @param rawPassword 明文密码
     * @param encodedPassword 加密后的密码
     * @return 是否匹配
     */
    boolean matches(String rawPassword, String encodedPassword);
    
    /**
     * 检查密码强度
     * 
     * @param password 密码
     * @return 密码强度等级
     */
    PasswordStrength checkStrength(String password);
    
    /**
     * 密码强度枚举
     */
    enum PasswordStrength {
        WEAK(1, "弱"),
        MEDIUM(2, "中等"),
        STRONG(3, "强"),
        VERY_STRONG(4, "很强");
        
        private final int level;
        private final String description;
        
        PasswordStrength(int level, String description) {
            this.level = level;
            this.description = description;
        }
        
        public int getLevel() { return level; }
        public String getDescription() { return description; }
    }
}
